package 设计原则.组合优于继承;

import java.util.HashSet;
import java.util.Set;

/**
 * 简述：复用别人的代码时，不宜使用继承，应该使用组合。
 *
 * 需求：制作一个组合，该集合能够记录下**曾经**添加过多少元素。（不只是统计某一时刻）
 *
 * 反例 #1：
 * 看似解决了需求，`add` 方法可以成功将`count`进行自加， `addAll`方法通过方法内调用`add`，可以成功将`count`进行增加操作。
 *
 * 缺陷：`JDK`版本如果未来进行更新，`addAll`方法**不再**通过方法内调用`add`，那么当调用`addAll`进行集合添加元素时，`count`将不无从进行自加。需求也将无法满足。
 * @author lxiaol
 * @date 2021年06月24日 16:08
 */
public class negtive_1 {
    static class MySet extends HashSet {
        private int count = 0;

        public int getCount() {
            return count;
        }

        @Override
        public boolean add(Object o) {
            count++;
            return super.add(o);
        }
    }

    public static void main(String[] args) {
        MySet mySet = new MySet();
        mySet.add("111111");
        mySet.add("22222222222222");
        mySet.add("2333");


        Set<String> hashSet = new HashSet<>();
        hashSet.add("集合+11111");
        hashSet.add("集合+22222222");
        hashSet.add("集合+233333");
        mySet.addAll(hashSet);

        System.out.println(mySet.getCount());
    }
}
